package comlib

/** 迭代器接口定义 */
abstract class XIterable[I,E] {
  /** 迭代开始(获取迭代器) */
  def iter(ite:I) : I
  /** 获取迭代器ite的下一个迭代器 */
  def next(ite:I) : I
  /** 获取迭代器ite中的元素 */
  def get(ite:I) : E
  /** 判断迭代器ite是否包含有效数据 */
  def hasNext(ite:I) : Boolean
}

object Iter{

  /** 列表迭代器 */
  implicit val ComlibListIterable = new XIterable[List[_],Any]{
    def iter(ite:List[_]) = ite
    def next(ite:List[_]) = ite.init
    def get(ite:List[_]) = ite.head
    def hasNext(ite:List[_]) = ite.size>0
  }

  implicit val JdbcIterable = new XIterable[java.sql.ResultSet, java.sql.ResultSet]{
    var hasNxt = true
    def iter(ite:ResultSet) = { hasNxt=true; ite }
    def next(ite:ResultSet) = {hasNxt=ite.next(); ite}
    def get(ite:ResultSet) = ite
    def hasNext(ite:ResultSet) = hasNxt
  }
}
